/*
 * Territory.java
 *
 * @author Michael Hansen
 * @author Lukas Thuernagel
 * @author Soeren Warszus
 */

package risk.game;

import java.awt.*;
import javax.swing.*;
import risk.player.*;
import java.util.*;

/**
 * Die Klasse Territory repraesentiert ein Land innerhalb der Spielkarte.
 *
 */
public class Territory {
    /**
     * Name des Landes
     */
    private String name;
    
    /**
     * Koordinaten der Landesgrenzen auf der grafischen Karte.
     */
    private Polygon frontiers;
    
    /**
     * Koordinate des Landesmittelpunktes.
     */
    private Point midpoint;
    
    /**
     * Liste der Nachbarlaender.
     */
    private ArrayList neighbors = null;
    
    /**
     * Besitzer des Landes. NULL wenn unbesetzt.
     */
    private PlayerModel owner = null; 
    
    /**
     * Groesse der Armee in diesem Land.
     */
    private int armySize = 0;
    
    /**
     * Grafische Anzeige der Armeeanzahl
     */
    //private TerritoryView armyDisplay;
    
    /**
     * Erstellt eine neue Instanz von Territory.
     *
     * @param name        Der Name des Terretoriums.
     * @param frontiers   Ein Polygon mit den Koordinaten der Landesgrenzen.
     * @param midpoint    Koordinate des Landesmittelpunkts.
     * @param neighbors   Liste der benachbarten Laender.
     */
    public Territory(String name, Polygon frontiers, Point midpoint, ArrayList neighbors) 
    {
        this.name      = name;
        this.frontiers = frontiers;
        this.midpoint  = midpoint;
        this.neighbors = neighbors;
    }
    
    /**
     * Registrierung der Anzeige der Armeeanzahl auf dem Spielbrett dieses Landes
     *
     * @param JPanel panel Panel auf dem die Armeeanzahl angezeigt wird
     *
    public void registerArmyDisplay(TerritoryView view){
        this.armyDisplay = view;
    }
    */
    
   /**
    * Gibt die Grenzen zurueck
    *
    * @return Polygon mit den Koordinaten der Landes
    */ 
    public Polygon getFrontiers(){
        return this.frontiers;
    }
    
   /**
    * Gibt den Landesmittelpunkt zurueck
    *
    * @return Point mit den Koordinaten des Landesmittelpunktes
    */
    public Point getMidpoint(){
        return this.midpoint;
    }
    
    /**
     * Gibt den Laendernamen zurueck.
     *
     * @return String des Laendernamens
     */
    public String getName() 
    {
        return this.name;
    }
    
    /**
     * Gibt den Besitzer des Landes zurueck.
     *
     * @return String des Landesbesetzers
     */
    public PlayerModel getOwner() 
    {
        return this.owner;
    }
    
    /**
     * Gibt die Anzahl der Truppen zurueck, die in dem Land weilt.
     *
     * @return Anzahl der Armeen
     */
    public int getArmySize() 
    {
        return this.armySize;
    }
    
    /**
     * Setzt den Besitzer des Landes.
     *
     * @param newOwner  Der neue Besitzer des Landes.
     */
    public void setOwner(PlayerModel newOwner) 
    {
        this.owner = newOwner;
    }
    
    /**
     * Setzt die Truppenstaerke, die in dem Land weilt.
     *
     * @param newArmySize  Die neue Anzahl an Armeen innerhalb des Landes.
     */
    public void setArmySize(int newArmySize) 
    {
        this.armySize = newArmySize;
        //armyDisplay.setArmySize(newArmySize);
    }
    
    /**
     * Methode die nur zum initialisieren der Armysize dient
     * 
     * @param newArmySize int
     */
    public void initializeArmySize(int newArmySize){
        this.armySize = newArmySize;
    }
    
    /**
     * Rueckgabe der Nachbarlaender
     *
     * @return ArrayList neigbours
     */
    public ArrayList getNeighbors(){
        return this.neighbors;
    }
}
